package demo01;

import java.util.Random;

public class Demo02Equals {
    public static void main(String[] args) {
        /*
         *  Person类默认继承了Object类，所以可以使用Object类的equals方法
         *  boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”。
         * 
         *  Object类下equals方法的源码：
         *      public boolean equals(Object obj) {
         *          return (this == obj);
         *      }
         *  参数：Object obj：可以传递任何对象
         *  方法体：==比较运算符，返回一个布尔值 true,false
         *      基本数据类型：比较的是数值
         *      引用数据类型：比较的是地址值
         *      this代表调用方法的对象，即下例中的person1
         *      obj代表方法的参数，即下例中的person2
         */
        Person person1 = new Person("粹花", 1);
        Person person2 = new Person("粹花", 1);

        boolean b = person1.equals(person2);
        System.out.println(b);
        // 重写equals方法前：false，两个对象的地址值不相同
        // 重写equals方法后：true，两个对象对应的属性相同

        Random random = new Random();
        System.out.println(person1.equals(random)); 
        // equals未加参数判断条件：ClassCastException：类型转换异常
        // equals加了参数判断条件：false

        System.out.println(person1.equals(null)); // false，在重写equals时，先判断obj是否为null，可以直接得到返回结果，提高程序效率

        System.out.println(person1.equals(person1)); // true，在重写equals时，先判断obj是否为自己本身，可以直接得到返回结果，提高程序效率
    }
}
